#include "cjthread.h"
#include <stdio.h>
#include <unistd.h>  // 或Windows的windows.h（ sleep用）

// 线程数据
typedef struct {
    int count;
    const char* name;
} ThreadData;

// 线程函数：循环计数，支持停止
static void counting_thread(void* user_data, bool (*is_stopped)(void*)) {
    ThreadData* data = (ThreadData*)user_data;
    int i = 0;

    while (i < data->count && !is_stopped(user_data)) {
        printf("[%s] 计数: %d\n", data->name, i);
        i++;
        sleep(1);  // 休眠1秒（Windows用Sleep(1000)）
    }

    printf("[%s] 线程结束\n", data->name);
}

int main() {
    // 初始化线程数据
    ThreadData data = {
        .count = 10,
        .name = "计数器线程"
    };

    // 创建线程
    CThread* thread = cjthread_create(counting_thread, &data);
    if (!thread) {
        fprintf(stderr, "创建线程失败\n");
        return 1;
    }

    printf("主线程: 线程创建成功，ID=%llu\n", cjthread_get_id(thread));

    // 运行3秒后请求停止
    sleep(3);  // 休眠3秒
    printf("主线程: 请求线程停止\n");
    cjthread_request_stop(thread);

    // 等待线程结束（可选，destroy会自动join）
    if (cjthread_joinable(thread)) {
        printf("主线程: 等待线程结束...\n");
        cjthread_join(thread);
    }

    // 销毁线程（自动join未结束的线程）
    cjthread_destroy(thread);
    printf("主线程: 程序结束\n");

    return 0;
}